#include <xen/config.h>
+#include <xen/multiboot.h>
#include <public/xen.h>
#include <asm/asm_defns.h>
#include <asm/desc.h>
.align 4
/*** MULTIBOOT HEADER ****/
+#define MULTIBOOT_HEADER_FLAGS (MULTIBOOT_HEADER_MODS_ALIGNED | \
+ MULTIBOOT_HEADER_WANT_MEMORY)
/* Magic number indicating a Multiboot header. */
- .long 0x1BADB002
+ .long MULTIBOOT_HEADER_MAGIC
/* Flags to bootloader (see Multiboot spec). */
- .long 0x00000003
+ .long MULTIBOOT_HEADER_FLAGS
/* Checksum: must be the negated sum of the first two fields. */
- .long -0x1BADB005
+ .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
not_multiboot_msg:
.asciz "ERR: Not a Multiboot bootloader!"
#include <xen/config.h>
+#include <xen/multiboot.h>
#include <public/xen.h>
#include <asm/asm_defns.h>
#include <asm/desc.h>
.org 0x004
/*** MULTIBOOT HEADER ****/
+#define MULTIBOOT_HEADER_FLAGS (MULTIBOOT_HEADER_MODS_ALIGNED | \
+ MULTIBOOT_HEADER_WANT_MEMORY)
/* Magic number indicating a Multiboot header. */
- .long 0x1BADB002
+ .long MULTIBOOT_HEADER_MAGIC
/* Flags to bootloader (see Multiboot spec). */
- .long 0x00000003
+ .long MULTIBOOT_HEADER_FLAGS
/* Checksum: must be the negated sum of the first two fields. */
- .long -0x1BADB005
+ .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
.Lbad_cpu_msg: .asciz "ERR: Not a 64-bit CPU!"
.Lbad_ldr_msg: .asciz "ERR: Not a Multiboot bootloader!"
#ifndef __MULTIBOOT_H__
#define __MULTIBOOT_H__
+
+/*
+ * Multiboot header structure.
+ */
+#define MULTIBOOT_HEADER_MAGIC 0x1BADB002
+#define MULTIBOOT_HEADER_MODS_ALIGNED 0x00000001
+#define MULTIBOOT_HEADER_WANT_MEMORY 0x00000002
+#define MULTIBOOT_HEADER_HAS_VBE 0x00000004
+#define MULTIBOOT_HEADER_HAS_ADDR 0x00010000
+
/* The magic number passed by a Multiboot-compliant boot loader. */
-#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
+#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
#define MBI_MEMLIMITS (1<<0)
#define MBI_DRIVES (1<<1)
#define MBI_CMDLINE (1<<2)
#define MBI_MODULES (1<<3)
+#define MBI_AOUT_SYMS (1<<4)
+#define MBI_ELF_SYMS (1<<5)
#define MBI_MEMMAP (1<<6)
#define MBI_LOADERNAME (1<<9)
+#ifndef __ASSEMBLY__
+
/* The symbol table for a.out. */
typedef struct {
u32 tabsize;
/* The Multiboot information. */
typedef struct {
u32 flags;
+
+ /* Valid if flags sets MBI_MEMLIMITS */
u32 mem_lower;
u32 mem_upper;
+
+ /* Valid if flags sets MBI_DRIVES */
u32 boot_device;
+
+ /* Valid if flags sets MBI_CMDLINE */
u32 cmdline;
+
+ /* Valid if flags sets MBI_MODULES */
u32 mods_count;
u32 mods_addr;
+
+ /* Valid if flags sets ... */
union {
- aout_symbol_table_t aout_sym;
- elf_section_header_table_t elf_sec;
+ aout_symbol_table_t aout_sym; /* ... MBI_AOUT_SYMS */
+ elf_section_header_table_t elf_sec; /* ... MBI_ELF_SYMS */
} u;
+
+ /* Valid if flags sets MBI_MEMMAP */
u32 mmap_length;
u32 mmap_addr;
} multiboot_info_t;
u32 type;
} memory_map_t;
+
+#endif /* __ASSEMBLY__ */
+
#endif /* __MULTIBOOT_H__ */